#include<stdio.h>
#include<stdlib.h>

/*  给两个数（-2000,2000），可以选择的操作 +5、-5、+7、-7、+12、-12
    求两个数之间的最短路径
*/

void f(int A,int B)
{
    int H[4015]={0};
    int cnt=A>B?A-B:B-A;

    H[7]=1;H[0]=2;H[2]=2;

    int i,j;
    for(i=0;i<cnt+7;i++)
    {
        if((i-7>=0)&&(H[i-7]==0||H[i]+1<H[i-7]))
        {
            H[i-7]=H[i]+1;
        }
        if((i-5>=0)&&(H[i-5]==0||H[i]+1<H[i-5]))
        {
            H[i-5]=H[i]+1;
        }
        if((i-12>=0)&&(H[i-12]==0||H[i]+1<H[i-12]))
        {
            H[i-7]=H[12]+1;
        }
        if(H[i+7]==0||H[i]+1<H[i+7])
        {
            H[i+7]=H[i]+1;
        }
        if(H[i+5]==0||H[i]+1<H[i+5])
        {
            H[i+5]=H[i]+1;
        }
        if(H[i+12]==0||H[i]+1<H[i+12])
        {
            H[i+12]=H[i]+1;
        }
    }

    if(A<B)
    {
        printf("%d ",A);
        for(i=B-A+7,j=A;i!=7;)
        {
            if(i-7>0 && i-7<cnt+7 && H[i]-H[i-7]==1)
            {
                printf("%d ",j=j+7);
                i=i-7;
                continue;
            }
            if(i-5>0 && i-5<cnt+7 && H[i]-H[i-5]==1)
            {
                printf("%d ",j=j+5);
                i=i-7;
                continue;
            }
            if(i-12>0 && i-12<cnt+7 && H[i]-H[i-12]==1)
            {
                printf("%d ",j=j+12);
                i=i-12;
                continue;
            }
            if(i+7>0 && i+7<cnt+7 && H[i]-H[i+7]==1)
            {
                printf("%d ",j=j-7);
                i=i+7;
                continue;
            }
            if(i+5>0 && i+5<cnt+7 && H[i]-H[i+5]==1)
            {
                printf("%d ",j=j-5);
                i=i+5;
                continue;
            }
            if(i+12>0 && i+12<cnt+7 && H[i]-H[i+12]==1)
            {
                printf("%d ",j=j-12);
                i=i+12;
                continue;
            }
        }
    }
}

int main()
{
    int A=0;
    int B=1;
    f(A,B);
}
